(font_put_extra): If VAL is nil, delete the slot for PROP
authorKenichi Handa <handa@m17n.org>
Thu, 9 Apr 2009 02:40:39 +0000 (02:40 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 9 Apr 2009 02:40:39 +0000 (02:40 +0000)
from the list of extra properties.
(font_clear_prop): Be sure to delete `:name' font property.

src/font.c

index f5a9e3e70e2a9eea07d5e3c16d8911d827b5fe5a..bb83fe938a072fb9dac667284630ff2632f174bf 100644 (file)
@@ -719,6 +719,8 @@ font_put_extra (font, prop, val)
     {
       Lisp_Object prev = Qnil;
 
+      if (NILP (val))
+       return val;
       while (CONSP (extra)
             && NILP (Fstring_lessp (prop, XCAR (XCAR (extra)))))
        prev = extra, extra = XCDR (extra);
@@ -729,6 +731,8 @@ font_put_extra (font, prop, val)
       return val;
     }
   XSETCDR (slot, val);
+  if (NILP (val))
+    ASET (font, FONT_EXTRA_INDEX, Fdelq (slot, extra));
   return val;
 }
 
@@ -3078,13 +3082,20 @@ font_clear_prop (attrs, prop)
 
   if (! FONTP (font))
     return;
+  if (! NILP (Ffont_get (font, QCname)))
+    {
+      font = Fcopy_font_spec (font);
+      font_put_extra (font, QCname, Qnil);
+    }
+
   if (NILP (AREF (font, prop))
       && prop != FONT_FAMILY_INDEX
       && prop != FONT_FOUNDRY_INDEX
       && prop != FONT_WIDTH_INDEX
       && prop != FONT_SIZE_INDEX)
     return;
-  font = Fcopy_font_spec (font);
+  if (EQ (font, attrs[LFACE_FONT_INDEX]))
+    font = Fcopy_font_spec (font);
   ASET (font, prop, Qnil);
   if (prop == FONT_FAMILY_INDEX || prop == FONT_FOUNDRY_INDEX)
     {